import config from '@/config/app.js'

/**
 * 获取充值套餐列表
 * @returns {Promise}
 */
export function getCreditPackages() {
	return new Promise((resolve, reject) => {
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}/credit/packages`,
			method: 'GET',
			header: {
				'Content-Type': 'application/json'
			},
			success: (res) => {
				console.log('获取充值套餐列表响应:', res);
				
				if (res.statusCode === 200) {
					resolve(res.data)
				} else {
					// 处理HTTP错误状态码
					const error = {
						statusCode: res.statusCode,
						message: res.data?.message || `HTTP ${res.statusCode} 错误`,
						code: res.data?.code || res.statusCode
					};
					reject(error);
				}
			},
			fail: (err) => {
				console.error('获取充值套餐列表请求失败:', err);
				reject(err);
			}
		})
	})
}

/**
 * 创建充值订单
 * @param {Object} data - 订单参数
 * @param {number} data.package_id - 套餐ID
 * @returns {Promise}
 */
export function createRechargeOrder(data) {
	return new Promise((resolve, reject) => {
		// 参数验证
		if (!data.package_id) {
			reject(new Error('缺少套餐ID'));
			return;
		}
		
		// 从本地存储获取token
		const token = uni.getStorageSync('token');
		if (!token) {
			reject(new Error('未找到token，请先登录'));
			return;
		}
		
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}/credit/order`,
			method: 'POST',
			data: data,
			header: {
				'Content-Type': 'application/json',
				'token': token
			},
			success: (res) => {
				console.log('创建充值订单响应:', res);
				
				if (res.statusCode === 200) {
					resolve(res.data)
				} else {
					// 处理HTTP错误状态码
					const error = {
						statusCode: res.statusCode,
						message: res.data?.message || `HTTP ${res.statusCode} 错误`,
						code: res.data?.code || res.statusCode
					};
					reject(error);
				}
			},
			fail: (err) => {
				console.error('创建充值订单请求失败:', err);
				reject(err);
			}
		})
	})
}

/**
 * 获取支付参数
 * @param {Object} data - 支付参数
 * @param {string} data.order_no - 订单号
 * @returns {Promise}
 */
export function getPayParams(data) {
	return new Promise((resolve, reject) => {
		// 参数验证
		if (!data.order_no) {
			reject(new Error('缺少订单号'));
			return;
		}
		
		// 从本地存储获取token
		const token = uni.getStorageSync('token');
		if (!token) {
			reject(new Error('未找到token，请先登录'));
			return;
		}
		
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}/credit/pay_params`,
			method: 'POST',
			data: data,
			header: {
				'Content-Type': 'application/json',
				'token': token
			},
			success: (res) => {
				console.log('获取支付参数响应:', res);
				
				if (res.statusCode === 200) {
					resolve(res.data)
				} else {
					// 处理HTTP错误状态码
					const error = {
						statusCode: res.statusCode,
						message: res.data?.message || `HTTP ${res.statusCode} 错误`,
						code: res.data?.code || res.statusCode
					};
					reject(error);
				}
			},
			fail: (err) => {
				console.error('获取支付参数请求失败:', err);
				reject(err);
			}
		})
	})
}

/**
 * 查询订单支付状态
 * @param {string} orderNo - 订单号
 * @returns {Promise}
 */
export function getOrderStatus(orderNo) {
	return new Promise((resolve, reject) => {
		// 参数验证
		if (!orderNo) {
			reject(new Error('缺少订单号'));
			return;
		}
		
		// 从本地存储获取token
		const token = uni.getStorageSync('token');
		if (!token) {
			reject(new Error('未找到token，请先登录'));
			return;
		}
		
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}/credit/order_status/${orderNo}`,
			method: 'GET',
			header: {
				'Content-Type': 'application/json',
				'token': token
			},
			success: (res) => {
				console.log('查询订单状态响应:', res);
				
				if (res.statusCode === 200) {
					resolve(res.data)
				} else {
					// 处理HTTP错误状态码
					const error = {
						statusCode: res.statusCode,
						message: res.data?.message || `HTTP ${res.statusCode} 错误`,
						code: res.data?.code || res.statusCode
					};
					reject(error);
				}
			},
			fail: (err) => {
				console.error('查询订单状态请求失败:', err);
				reject(err);
			}
		})
	})
} 

/**
 * 获取充值历史记录
 * @param {Object} params - 查询参数
 * @param {number} [params.page=1] - 页码
 * @param {number} [params.limit=10] - 每页记录数
 * @param {number} [params.status] - 可选，订单状态筛选
 * @returns {Promise}
 */
export function getRechargeHistory(params = {}) {
	return new Promise((resolve, reject) => {
		// 从本地存储获取token
		const token = uni.getStorageSync('token');
		if (!token) {
			reject(new Error('未找到token，请先登录'));
			return;
		}
		
		// 构建查询参数
		const queryParams = {
			page: params.page || 1,
			limit: params.limit || 500
		};
		
		// 如果提供了状态参数，添加到查询条件
		if (params.status !== undefined) {
			queryParams.status = params.status;
		}
		
		// 构建URL查询字符串
		const queryString = Object.keys(queryParams)
			.map(key => `${key}=${encodeURIComponent(queryParams[key])}`)
			.join('&');
		
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}/credit/history?${queryString}`,
			method: 'GET',
			header: {
				'Content-Type': 'application/json',
				'token': token
			},
			success: (res) => {
				console.log('获取充值历史记录响应:', res);
				
				if (res.statusCode === 200) {
					resolve(res.data)
				} else {
					// 处理HTTP错误状态码
					const error = {
						statusCode: res.statusCode,
						message: res.data?.message || `HTTP ${res.statusCode} 错误`,
						code: res.data?.code || res.statusCode
					};
					reject(error);
				}
			},
			fail: (err) => {
				console.error('获取充值历史记录请求失败:', err);
				reject(err);
			}
		})
	})
} 

/**
 * 消费积分解锁图片
 * @param {Object} data - 解锁参数
 * @param {number|string} data.photo_id - 图片ID
 * @param {string} [data.category_type='portrait'] - 图片分类类型
 * @returns {Promise}
 */
export function consumeCreditsForPhoto(data) {
	return new Promise((resolve, reject) => {
		// 参数验证
		if (!data.photo_id) {
			reject(new Error('缺少图片ID'));
			return;
		}
		
		// 从本地存储获取token
		const token = uni.getStorageSync('token');
		if (!token) {
			reject(new Error('未找到token，请先登录'));
			return;
		}
		
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}/credit/consumeCreditsForPhoto`,
			method: 'POST',
			data: data,
			header: {
				'Content-Type': 'application/json',
				'token': token
			},
			success: (res) => {
				console.log('消费积分解锁图片响应:', res);
				
				if (res.statusCode === 200) {
					resolve(res.data)
				} else {
					// 处理HTTP错误状态码
					const error = {
						statusCode: res.statusCode,
						message: res.data?.message || `HTTP ${res.statusCode} 错误`,
						code: res.data?.code || res.statusCode
					};
					reject(error);
				}
			},
			fail: (err) => {
				console.error('消费积分解锁图片请求失败:', err);
				reject(err);
			}
		})
	})
} 